package org.jw.testemunhopublico.service.impl;

import java.util.Date;
import java.util.List;

import javax.inject.Inject;

import org.jw.testemunhopublico.exceptions.NoFunctionalException;
import org.jw.testemunhopublico.repository.dao.PublicadorTurnoDaoIF;
import org.jw.testemunhopublico.repository.entities.PublicadorTurno;
import org.jw.testemunhopublico.repository.entities.Turno;
import org.jw.testemunhopublico.service.TurnoServiceIF;
import org.jw.testemunhopublico.util.Constantes;
import org.jw.testemunhopublico.util.DateUtil;
import org.jw.testemunhopublico.util.ParametrosUtil;
import org.springframework.stereotype.Service;

@Service
public class TurnoService implements TurnoServiceIF {

	private PublicadorTurnoDaoIF publicadorTurnoDao;

	private int numeroDePublicadoresPorTurno = Integer.parseInt(ParametrosUtil
			.getValue(Constantes.PARAMETRO_NUMERO_DE_PUBLICADORES_POR_TURNO));

	public void designarPublicadores(Date dataInicio, Date dataFinal)
			throws NoFunctionalException {
		List<Turno> turnos = null;

		turnos = publicadorTurnoDao
				.listTurnosOrdenadosPorPublicadoresDisponiveis(dataInicio,
						dataFinal);

		if (turnos == null || turnos.size() <= 0)
			return;

		for (Turno turno : turnos)
			designarPublicadores(turno, dataInicio, dataFinal);
	}

	public void designarPublicadores(Turno turno) throws NoFunctionalException {
		Date dataInicio = DateUtil.primeiroDiaDoMes(turno.getData());
		Date dataFinal = DateUtil.ultimoDiaDoMes(turno.getData());
		designarPublicadores(turno, dataInicio, dataFinal);
	}

	public void designarPublicadores(Turno turno, Date dataInicio,
			Date dataFinal) throws NoFunctionalException {
		List<PublicadorTurno> publicadoresDoTurno = null;

		publicadoresDoTurno = publicadorTurnoDao
				.listPublicadoresDoTurnoOrdenados(turno, dataInicio, dataFinal);

		if (publicadoresDoTurno == null
				|| publicadoresDoTurno.size() < numeroDePublicadoresPorTurno)
			return;

		int vagasDisponiveisNoTurno = numeroDePublicadoresPorTurno;
		for (PublicadorTurno publicadorTurno : publicadoresDoTurno) {
			if (vagasDisponiveisNoTurno > 0) {
				publicadorTurno.setDesignado(true);
				vagasDisponiveisNoTurno--;
			} else
				publicadorTurno.setDesignado(false);

			 System.out.println("\t" + publicadorTurno);
//			publicadorTurnoDao.updatePublicadorTurno(publicadorTurno);
		}
	}

	@Inject
	public void setPublicadorTurnoDao(PublicadorTurnoDaoIF publicadorTurnoDao) {
		this.publicadorTurnoDao = publicadorTurnoDao;
	}

}
